//#include "RecordFieldAtMonitorPoint.h"
//
//RecordFieldAtMonitorPoint::RecordFieldAtMonitorPoint(Config* config_, RecordParameter record_param_) :
//    Record(config_, record_param_)
//{
//    scalarFieldList = config->io->fields;
//    scalarFieldData.resize(scalarFieldList.size());
//    for (int iField = 0; iField < scalarFieldList.size(); iField++)
//    {
//        scalarFieldData[iField].resize(config->sim_time->timestep_io);
//    }
//
//
//    vectorFieldList = config->io->vector_fields;
//    vectorFieldData.resize(vectorFieldList.size());
//    for (int iVectorField = 0; iVectorField < vectorFieldList.size(); iVectorField++)
//    {
//        vectorFieldData[iVectorField].resize(config->sim_time->timestep_io * 3);
//    }
//
//    monitorPoint.position[0] = record_param.monitorPointPosition[0];
//    monitorPoint.position[1] = record_param.monitorPointPosition[1];
//    monitorPoint.position[2] = record_param.monitorPointPosition[2];
//
//    if (config->debugLevel > 1) log_info << "monitor point location: " << monitorPoint.position[0] << " " << monitorPoint.position[1] << " " << monitorPoint.position[2];
//
//    //if (config->debugLevel > 1) log_info << "begin calculate volume id";
//    iVolume = config->mesh->getVolumeIndex(monitorPoint);
//    //if (config->debugLevel > 1) log_info << "end calculate volume id, iVolume = " << iVolume;
//
//
//    //check if monitor point is in the simulation domain
//    int iVolumeFlag;
//    int iVolumeFlagGlobal;
//
//    iVolumeFlag = 1;
//    if (iVolume < 0)
//    {
//        iVolumeFlag = 0;
//    }
//    config->pmpi->all_reduce_sum_int(&iVolumeFlag, &iVolumeFlagGlobal, 1);
//    //if (config->debugLevel > 1) log_warning << "iVolumeFlagGlobal = " << iVolumeFlagGlobal;
//    if (iVolumeFlagGlobal != 1)
//    {
//        log_error << "monitor point location error, iVolumeFlagGlobal = " << iVolumeFlagGlobal;
//        exit(0);
//    }
//}
//
//
//RecordFieldAtMonitorPoint::~RecordFieldAtMonitorPoint()
//{
//    
//}
//
//
//void RecordFieldAtMonitorPoint::cal()
//{
//    for (int iField = 0; iField < scalarFieldList.size(); iField++)
//    {
//        auto scalarField = scalarFieldList[iField];
//
//        double valueLocal = 0.0;
//        double valueGlobal = 0.0;
//
//        if (iVolume != -1)
//        {
//            valueLocal = scalarField->getValue(iVolume, monitorPoint);
//        }
//
//        config->pmpi->all_reduce_sum_double(&valueLocal, &valueGlobal, 1);
//        scalarFieldData[iField][iTimeStepRecord] = valueGlobal;
//    }
//
//    for (int iVectorField = 0; iVectorField < vectorFieldList.size(); iVectorField++)
//    {
//        auto vectorField = vectorFieldList[iVectorField];
//
//        FemVector3D vectorValueLocal;
//        FemVector3D vectorValueGlobal;
//        vectorValueLocal.x[0] = 0.0;
//        vectorValueLocal.x[1] = 0.0;
//        vectorValueLocal.x[2] = 0.0;
//
//        if (iVolume != -1)
//        {
//            vectorValueLocal = vectorField->getValue(iVolume, monitorPoint);
//        }
//
//        config->pmpi->all_reduce_sum_double(vectorValueLocal.x, vectorValueGlobal.x, 3);
//        
//        vectorFieldData[iVectorField][iTimeStepRecord * 3 + 0] = vectorValueGlobal.x[0];
//        vectorFieldData[iVectorField][iTimeStepRecord * 3 + 1] = vectorValueGlobal.x[1];
//        vectorFieldData[iVectorField][iTimeStepRecord * 3 + 2] = vectorValueGlobal.x[2];
//    }
//
//    iTimeStepRecord++;
//}